package com.atguigu.gmall.product.service.impl;

import com.atguigu.gmall.product.entity.SkuAttrValue;
import com.atguigu.gmall.product.entity.SkuImage;
import com.atguigu.gmall.product.entity.SkuSaleAttrValue;
import com.atguigu.gmall.product.service.SkuAttrValueService;
import com.atguigu.gmall.product.service.SkuImageService;
import com.atguigu.gmall.product.service.SkuSaleAttrValueService;
import com.atguigu.gmall.product.vo.SkuSaveVo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.atguigu.gmall.product.entity.SkuInfo;
import com.atguigu.gmall.product.service.SkuInfoService;
import com.atguigu.gmall.product.mapper.SkuInfoMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

/**
 *
 */
@Service
public class SkuInfoServiceImpl extends ServiceImpl<SkuInfoMapper, SkuInfo>
    implements SkuInfoService{

    @Autowired
    SkuAttrValueService  skuAttrValueService;

    @Autowired
    SkuSaleAttrValueService skuSaleAttrValueService;

    @Autowired
    SkuImageService skuImageService;

    @Override
    public void saveSkuInfoDate(SkuSaveVo vo) {
        //1、添加到sku_info表
        SkuInfo skuInfo = new SkuInfo();
        BeanUtils.copyProperties(vo,skuInfo);
        save(skuInfo);
        Long skuId = skuInfo.getId();

        //2、添加到sku_attr_value
        List<SkuSaveVo.SkuAttrValueListDTO> skuAttrValueList = vo.getSkuAttrValueList();
        List<SkuAttrValue> attrValueList = skuAttrValueList.stream().map(item -> {
            SkuAttrValue skuAttrValue = new SkuAttrValue();
            skuAttrValue.setSkuId(skuId);
            //属性名一样，但是类型不一样String -> Long  可以复制属性成功吗？？？
            //经验证，不会成功
            BeanUtils.copyProperties(item, skuAttrValue);
            return skuAttrValue;
        }).collect(Collectors.toList());
        skuAttrValueService.saveBatch(attrValueList);

        //3、添加到sku_sale_attr_value
        List<SkuSaveVo.SkuSaleAttrValueListDTO> skuSaleAttrValueList = vo.getSkuSaleAttrValueList();
        List<SkuSaleAttrValue> saleAttrValues = skuSaleAttrValueList.stream().map(item -> {
            SkuSaleAttrValue skuSaleAttrValue = new SkuSaleAttrValue();
            skuSaleAttrValue.setSkuId(skuId);
            skuSaleAttrValue.setSpuId(vo.getSpuId());
            skuSaleAttrValue.setSaleAttrValueId(item.getSaleAttrValueId());
            return skuSaleAttrValue;
        }).collect(Collectors.toList());
        skuSaleAttrValueService.saveBatch(saleAttrValues);

        //4、添加到sku_image表
        List<SkuImage> skuImageList = vo.getSkuImageList().stream().map(item -> {
            SkuImage skuImage = new SkuImage();
            skuImage.setSkuId(skuId);
            BeanUtils.copyProperties(item, skuImage);
            return skuImage;
        }).collect(Collectors.toList());
        skuImageService.saveBatch(skuImageList);
    }

    @Override
    public void onSale(Long skuId) {
        SkuInfo skuInfo = this.getById(skuId);
        skuInfo.setIsSale((byte) 1);
        this.updateById(skuInfo);

    }

    @Override
    public void cancelSale(Long skuId) {
        SkuInfo skuInfo = this.getById(skuId);
        skuInfo.setIsSale((byte)0);
        this.updateById(skuInfo);
    }


}




